/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package xsystems.propagationModel;

import java.util.ArrayList;

/**
 *
 * @author Karine
 */
public class LogDistanceModel extends PropagationModel {

    private String nomeMetodo;
    private double distTotal;
    private double PL_do;
    private double do_inicial;
    private int n_environment;
    private int numberPoints;
    private ArrayList<Point> Points_LogDistanceModel;

    public LogDistanceModel(String nomeMetodo, int distTotal, double PL_do, double do_inicial, int n_environment, int numberPoints) {

        super(nomeMetodo);
        this.nomeMetodo = nomeMetodo; //Nome do Método
        this.distTotal = distTotal; //Distância Total percorrida
        this.PL_do = PL_do;
        this.do_inicial = do_inicial;
        this.n_environment = n_environment;
        this.numberPoints = numberPoints; // Número de pontos considerados nas medições
        Points_LogDistanceModel = new ArrayList<>();
    }

    // Método que calcula atenuação do sinal ao longo da distância
    public ArrayList<Point> getPathLoss() {

        double[] attenuation = new double[numberPoints + 1]; //Cria um vetor para armazenar o valor encontrado de atenuação em cada ponto
        double rate = distTotal / numberPoints; //rate é a lagura de um intervalo ou a razão  

        for (int i = 1; i < numberPoints + 1; i++) {
            double positionReceiver = i * rate; // retorna a posição do receptor em um dado instante
            //Calculo da atenuação em um ponto específico:
            attenuation[i] = (double) (PL_do + (10 * n_environment * Math.log10(positionReceiver / do_inicial)));
            // perda = PLdo + 10*n*log10(distancia(k)/do);          

            // Criando um objeto do tipo ponto e adiciona na lista de Pontos:
            Point ponto = new Point(positionReceiver, attenuation[i]);
            Points_LogDistanceModel.add(ponto);
        }
        return Points_LogDistanceModel;
    }

    @Override
    public ArrayList<Point> getPoints() {

        return getPathLoss();

    }
}
